/**
  ******************************************************************************
  * @file    USART2_Config.h
  * @brief   USART2串口通信模块头文件
  * @author  Embedded Team
  * @version V1.1
  * @date    2023-XX-XX
  * @note    功能特性：
  *          1. 支持8N1标准串口格式
  *          2. 提供阻塞式/中断式数据传输
  *          3. 集成格式化输出功能
  *          4. 硬件无关接口设计
  ******************************************************************************
  */

  #ifndef __USART2_CONFIG_H
  #define __USART2_CONFIG_H
  
  #ifdef __cplusplus
   extern "C" {
  #endif
  
  /*-------------------------------- 头文件依赖 --------------------------------*/
  #include "stm32f10x.h"      // 芯片外设寄存器定义
  #include "Delay.h"          // 延时函数
  #include <stdio.h>          // 标准输入输出（支持printf）
  #include <stdarg.h>         // 可变参数支持（用于自定义printf）
  #include <stdint.h>         // 标准整型定义
  
  /*--------------------------- 函数声明（API接口） ---------------------------*/
  /**
    * @brief  USART2初始化配置
    * @param  baud 波特率（单位：bps，范围2400-115200）
    * @note   默认配置：PA9(TX)-复用推挽输出，PA10(RX)-浮空输入
    */
  void USART2_Config(u32 baud);
  
  /**
    * @brief  串口1中断服务函数（CMSIS标准名称）
    * @note   需在启动文件中声明中断向量
    */
  void USART2_IRQHandler(void);
  
  /**
    * @brief  阻塞式单字节发送
    * @param  Byte 待发送数据（0x00-0xFF）
    * @retval 无
    */
  void USART2_SendByte(u8 Byte);
  
  /**
    * @brief  字节数组发送（二进制安全）
    * @param  Array  数据首地址（const修饰保证数据安全）
    * @param  Length 数据长度（单位：字节）
    * @warning 长度超过缓冲区将导致阻塞
    */
  void USART2_SendArray(const u8 *Array, u16 Length);
  
  /**
    * @brief  通用串口字符串发送函数
    * @param  USARTx 串口设备指针（如USART2、USART2）
    * @param  str    字符串指针（自动检测NULL终止符）
    * @note   支持跨串口复用，线程不安全
    */
  //void USART_SendString(USART_TypeDef* USARTx, const char *str);
  
  /**
    * @brief  定长数字发送（自动补零）
    * @param  Num    待发送数字（0-99999999）
    * @param  Length 显示位数（1-8）
    * @example USART2_SendNumber(123, 5) 输出"00123"
    */
  void USART2_SendNumber(u32 Num, u8 Length);
  
  /**
    * @brief  安全版格式化输出（不依赖MicroLIB）
    * @param  format 格式化字符串（支持%s/%d/%f等）
    * @param  ...    可变参数列表
    * @note   内部缓冲区128字节，超长内容会被截断
    */
  void USART2_Printf(const char *format, ...);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* __USART2_CONFIG_H */
  